package LeetCode;

import Util.ListNode;
import Util.SingleLinkedList;

import java.util.LinkedList;

/**
 * @author attcat
 * ---做一个有趣的程序员
 * @date 2022-10-22 20:37
 * @description 环形链表，判断链表中是否有环
 */
public class LeetCode_141 {
    public static void main(String[] args) { // 自定义一个环形链表
        ListNode listNode1=new ListNode();
        ListNode listNode2=new ListNode();
        ListNode listNode3=new ListNode();
        ListNode listNode4=new ListNode();
        ListNode listNode5=new ListNode();
       ListNode listNode6=new ListNode();
        listNode1.setVal(1);
        listNode2.setVal(2);
        listNode3.setVal(3);
        listNode4.setVal(4);
        listNode5.setVal(5);
        listNode1.setNext(listNode2);
        listNode2.setNext(listNode3);
        listNode3.setNext(listNode4);
        listNode4.setNext(listNode5);
        listNode5.setNext(listNode3);
        System.out.println(hasCycle(listNode1));


    }


    /****
     * 判断链表中是否有环
     * 通过2个指针 一个1，一个2，往下跑，看是否会相遇。  为单数会空指针异常
     * @return
     */
    public static Boolean hasCycle(ListNode node ){
       if(node==null){
        return  false;
       }
        ListNode oneNode=node;
        ListNode towNode=node;
        while (oneNode.next!=null&&towNode.next.next!=null){
            oneNode=oneNode.next;
            towNode= towNode.next.next;
            if(oneNode==towNode){
                return true;
            }

        }
        return false;

    }

   public static void testsingleLinkedList(){
       SingleLinkedList singleLinkedList=new SingleLinkedList();
       singleLinkedList.addLast(1);
       singleLinkedList.addLast(7);
       singleLinkedList.addLast(12);
       singleLinkedList.addLast(3);
       System.out.println(singleLinkedList.toString());
   }
}
